#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include "config.h"
#include "functions.h"


// 验证管理员身份 验证成功返回true
bool verify_admin(){
    char verify_id[50]; // 记录输入的账号
    char verify_passwd[50]; // 记录输入的密码
    int id_index = -1; //记录输入的账号对应数据中的存储位置
    int chance = 0;

    verify_loop:if(chance == 3){
        printf("退出\n");
        return false;
    }
    printf("--------------------------管理员登录--------------------------\n");
    printf("输入管理员用户名:");
    scanf("%s", verify_id);
    printf("输入管理员密码:");
    scanf("%s", verify_passwd);

    for(int i = 0; i < ADMIN_SIZE; i++){
        if(!strcmp((verify_id), (id[i]))){
            id_index = i;
            break;
        }
    }


    // 如果找不到输入的用户名，index值为-1
    if(id_index == -1) {
        printf("用户名不存在，请重试\n");
        printf("还有%d次机会\n", 3-chance-1);
        chance++;
        goto verify_loop;
    }
    // 如果找到了用户名，与配置中的密码比对
    else{
        if(!strcmp((verify_passwd), (passwd[id_index]))){
            printf("登陆成功\n");
            is_admin = true;
            strcpy(current_user, id[id_index]); //登录成功后，记录当前为管理员角色
            return true;
        }
        else{
            printf("密码错误，请重试\n");
            printf("还有%d次机会\n", 3-chance-1);
            chance++;
            goto verify_loop;
        }
    }

}


// 注册用户
void regist(){
    char regist_id[50]; // 记录输入的账号
    char regist_passwd[50]; // 记录输入的密码
    char regist_passwd_ensure[50]; // 记录输入的确认密码

    if(user_count > 10){
        printf("系统用户已上限，无法继续注册\n");
        return;
    }

    printf("--------------------------用户注册--------------------------\n");
    printf("输入用户名:");
    scanf("%s", regist_id);
    printf("输入密码:");
    scanf("%s", regist_passwd);
    printf("确认密码:");
    scanf("%s", regist_passwd_ensure);

    if(!strcmp(regist_passwd, regist_passwd_ensure)){
        printf("注册成功\n");
        strcpy(user_id[user_count], regist_id);
        strcpy(user_passwd[user_count], regist_passwd);
        user_count++;
    }
    else{
        printf("密码不一致，请重试\n");
    }

    return;
}

bool verify_user(){

    char verify_id[50]; // 记录输入的账号
    char verify_passwd[50]; // 记录输入的密码
    int id_index = -1; //记录输入的账号对应数据中的存储位置
    int chance = 0;

    verify_loop:if(chance == 3){
        printf("退出\n");
        return false;
    }
    printf("--------------------------用户登录--------------------------\n");
    printf("输入用户名:");
    scanf("%s", verify_id);
    printf("输入密码:");
    scanf("%s", verify_passwd);

    for(int i = 0; i < USER_SIZE; i++){
        if(!strcmp((verify_id), (user_id[i]))){
            id_index = i;
            break;
        }
    }


    // 如果找不到输入的用户名，index值为-1
    if(id_index == -1) {
        printf("用户名不存在，请重试\n");
        printf("还有%d次机会\n", 3-chance-1);
        chance++;
        goto verify_loop;
    }
    // 如果找到了用户名，与配置中的密码比对
    else{
        if(!strcmp((verify_passwd), (user_passwd[id_index]))){
            printf("登陆成功\n");
            is_admin = false;
            strcpy(current_user, user_id[id_index]); // 记录当前身份为普通用户
            return true;
        }
        else{
            printf("密码错误，请重试\n");
            printf("还有%d次机会\n", 3-chance-1);
            chance++;
            goto verify_loop;
        }
    }
}

// 用户登录界面
void login_interface(){

    int identity = 0; // 区别登录的身份
    
    printf("------------------------------登陆界面------------------------------\n");
    printf("\t1.管理员登录\n");
    printf("\t2.用户登录\n");
    printf("\t3.用户注册\n");
    printf("--------------------------------------------------------------------\n");
    printf("选择身份:");
    scanf("%d", &identity);
    printf("\n");

    switch (identity)
    {
    case 1:
        verify_admin();
        wait_a_key();
        break;

    case 2:
        verify_user();
        wait_a_key();
    break;

    case 3:
        regist();
        wait_a_key();
    break;

    default:
        printf("输入错误，请重试\n");
        wait_a_key();
        break;
    }
    

    return;
}